#ifndef AIREDEDESSIN_H
#define AIREDEDESSIN_H

#include "arbre.h"
#include <QWidget>
#include <QtGui>
#include <QCursor>
#include "mainwindow.h"
#include "ui_mainwindow.h"
#include "annulerrefaire.h"

class AireDeDessin : public QWidget
{
    Q_OBJECT

private:

    bool drag;
    Noeud * noeudDeplace;

    // nb pixels de large pour dessiner un noeud
    static const unsigned int largeurNoeud = 32;
    static const unsigned int marge = 40;

    // le zoom en pourcentage
    int monScale;


    // le noeud selectionne
    Noeud * noeudCourant;

    // l'interface
    Ui::MainWindow * monUI;
    MainWindow * fenetre;

    //dessins
    void dessineArbre( QPainter * p);
    void dessineNoeudsRecursif( QPainter * p, QList<QList<Noeud *> > ll, unsigned int noLigne);
    void dessineNoeud( QPainter * p, QPoint pos, Noeud * n );

    // pour connaitre le noeud a la position donnee
    Noeud * getNoeudAt(QPoint pos);

    // changement de noeud courant
    void changerNoeudCourant(Noeud * noeud);

    QImage getImage(int type);

public:
    // l'arbre a dessiner
    Arbre * monArbre;

    // l'historique
    AnnulerRefaire * historique;

    // la selection
    QList<Noeud *> selection;

    void reinitialise();

    bool annuler();
    bool refaire();
    bool changeNoeudUp();
    bool changeNoeudDown();
    bool changeNoeudLeft();
    bool changeNoeudRight();

    void majUI();

    explicit AireDeDessin(QWidget * parent = 0);
    ~AireDeDessin();

    void paintEvent (QPaintEvent *);

    void ajouterFilsAuNoeudCourant(int categorie);
    void ajouterRelationAuNoeudCourant(int relation);

    void supprimerNoeudCourantEtSesFils();

    // le zoom
    void zoom(int pourcentage);

    Noeud* getNoeudCourant();

    // affichage notification
    void notifier(QString message);

signals:

public slots:
    void mouseMoveEvent(QMouseEvent * e);
    void mousePressEvent(QMouseEvent * e);
    void mouseReleaseEvent(QMouseEvent * e);
    void mouseDoubleClickEvent(QMouseEvent * e);
    void changerRelationOrder();
    void changerRelationSequence();
    void changerRelationSynchro();
    void changerRelationChoix();

    // edition noeud
    void editerNoeud();

};

#endif // AIREDEDESSIN_H
